package cn.genmer.test.security.writtenTest.tuya;

import java.util.Arrays;

/**
 * @program: 智能涂鸦笔试题1
 * 给你两个版本号 version和 version2,请你比较它亻
 * 版本号由一个或多个修订号组成,各修订号
 * 连接。每个修订号由多位数字组成,可能包含
 * 前导零。每个版本号至少包含一个字符。修订号从左到右编号,下标从0开始,最左边的修订号下
 * 标为0
 * 个修订号下标
 * 以此类推。例如,2.5.33和0.1都是有效的版本号
 * 比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较忽略任何前
 * 导零后的整数值。也就是说,修订号1和修订号001相等。如果版本号没有指定某个下标处的修订
 * 则该修订号视为0。例如,版本1.0小于版本
 * 为它们下标为0的修订号相同,而下标为
 * 的修订号分别为0和1,0<1。
 * 如果 version1> version2返
 * 如果 version1< version2返回
 * 除此之外返回0
 * @description:
 * @author: Genmer
 * @create: 2021-09-26 20:20
 **/
public class VersionCompara {
    public static void main(String[] args) {
        System.out.println(compareVersion("1.1.1.1", "1.1"));
    }
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 比较版本号
     * @param version1 string字符串 version1
     * @param version2 string字符串 version2
     * @return int整型
     */
    public static int compareVersion (String version1, String version2) {
        // write code here
        int[] intArray1 = getIntArray(version1);
        int[] intArray2 = getIntArray(version2);

        // 确保1>2
        if (intArray1.length < intArray2.length){
            return compareVersion(version2, version1);
        }
        int flag =0;
        // 使用长度小的循环，可以使循环次数尽量少
        for (int i=0; i< intArray2.length; i++){
            flag++;
               if (intArray1[i] != intArray2[i]){
                   if (intArray1[i] > intArray2[i]){
                       return 1;
                   } else {
                        return -1;
                   }
               }
        }
        // 循环结束后，证明array2便利完成，只要array1还有值且大于0，就是array1大
        if (intArray1[flag] > 0){
            return 1;
        }
        // 如果没有，相等
        return 0;

    }

    public static int[] getIntArray(String version){
        String[] split = version.split("\\.");
        int[] ints = Arrays.stream(split).mapToInt(Integer::parseInt).toArray();
        return ints;
    }
}
